package com.example.贪心歌手;

import java.util.PriorityQueue;
import java.util.Scanner;

/**
 * @Author: 唐佳辉
 * @CreateTime： 2024-06-14-上午9:41
 * @Description:
 *
 * 歌手准备从 A 城去 B 城参加演出
 *
 * 按照合同，他必须在 T 天内赶到。
 * 歌手途径 N 座城市。
 * 歌手不能往回走。
 * 每两座城市之间需要的天数都可以提前获知。
 * 歌手在每座城市都可以在路边卖唱赚钱。经过调研，歌手提前获知了每座城市卖唱的收入预期。如果在一座城市第一天卖唱可以赚 M，后续每天的收入会减少 D (第二天赚的钱是 M-D，第三天是 M-2D…)。如果收入减到 0 就不会再少了。
 * 歌手到达后的第二天才能开始卖唱。如果今天卖过唱，第二天才能出发。
 * 问贪心的歌手最多可以赚多少钱？

 */
public class Main {


    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int T = scanner.nextInt();
        int N = scanner.nextInt();
        int[] days = new int[N+1];
        for (int i = 0; i < N+1; i++) {
            days[i] = scanner.nextInt();
        }
        PriorityQueue<int[]> heap = new PriorityQueue<>((a, b) -> Integer.compare(b[0], a[0])); // Max heap
        for (int i = 0; i < N; i++) {
            int M = scanner.nextInt();
            int D = scanner.nextInt();
            heap.offer(new int[]{M, D});
        }
        int X = T - sum(days);
        int ans = 0;
        for (int i = 0; i < X; i++) {
            if (heap.isEmpty()) {
                break;
            }
            int[] city = heap.poll();
            int M = city[0];
            int D = city[1];
            ans += M;
            M -= D;
            if (M > 0) {
                heap.offer(new int[]{M, D});
            }
        }
        System.out.println(ans);
    }

    private static int sum(int[] arr) {
        int sum = 0;
        for (int num : arr) {
            sum += num;
        }
        return sum;
    }

}
